جزوه · فصل سوم · جلسه ۳۲ · مراحل بوت لینوکس ← بازگشت به فهرست
📘 فصل سوم · جلسه ۳۲ مراحل بوت لینوکس
📅 تاریخ: شنبه، ۲۴ مرداد ۱۴۰۵ 👤 مدرس: محمد عابدینی 🐚 Zsh · 🐧 Debian (کالی) · 📦 Red Hat

▍ مقدمه

فرآیند بوت (Boot) در لینوکس، مجموعه مراحلی است که از لحظه روشن شدن سیستم تا آماده شدن برای ورود کاربر انجام می‌شود. درک این مراحل برای عیب‌یابی، تنظیمات پیشرفته و مدیریت سیستم بسیار حیاتی است. در این جلسه، گام‌به‌گام با این فرآیند آشنا می‌شویم و با استفاده از ابزارهای خط فرمان، اطلاعات سخت‌افزاری سیستم خود را بررسی می‌کنیم.

🔑 خلاصه مراحل بوت:
  1. روشن شدن (Power On): جریان برق به مادربرد می‌رسد.
  2. BIOS/UEFI: سخت‌افزارهای اولیه را شناسایی و تست می‌کند (POST).
  3. تشخیص دستگاه‌ها: دیسک‌ها، حافظه، صفحه کلید و ... را شناسایی می‌کند.
  4. انتخاب دستگاه بوت: بر اساس تنظیمات، دیسک بوت را انتخاب می‌کند.
  5. بارگذاری Bootloader: GRUB را از دیسک خوانده و اجرا می‌کند.
  6. بارگذاری هسته (Kernel): هسته لینوکس را در حافظه بارگذاری می‌کند.
  7. اجرای systemd (اولین پردازش): اولین پردازش در فضای کاربری (User Space) را اجرا می‌کند.
  8. اجرای فایل‌های target: سرویس‌های مختلف را بر اساس targetها (مانند multi-user.target) شروع می‌کند.
  9. اجرای اسکریپت‌های راه‌اندازی: اسکریپت‌های سیستمی مانند /etc/profile و ~/.bashrc را اجرا می‌کند.
  10. ورود کاربر: سیستم آماده ورود کاربر است.

▍ مراحل بوت به تفکیک

• ۱. روشن شدن (Power On)

با روشن شدن سیستم، جریان برق به مادربرد و قطعات می‌رسد و پردازنده شروع به اجرای کدهای ذخیره‌شده در حافظه غیرفرار (Non-volatile Memory) می‌کند.

• ۲. BIOS/UEFI و POST

سیستم ابتدا BIOS (Basic Input/Output System) یا UEFI (Unified Extensible Firmware Interface) را اجرا می‌کند. این نرم‌افزار، POST (Power-On Self Test) را انجام می‌دهد تا سلامت سخت‌افزارهای اولیه مانند RAM، صفحه کلید و دیسک‌ها را بررسی کند.

💡 نکته مهم:

حجم کدهای اجرایی BIOS/UEFI بسیار کم است و فقط برای انجام وظایف اولیه طراحی شده است. به همین دلیل، برای بارگذاری سیستم‌عامل به یک برنامه کمکی به نام Bootloader نیاز دارد.

• ۳. تشخیص دستگاه‌ها و انتخاب دستگاه بوت

BIOS/UEFI تمام دستگاه‌های متصل را شناسایی می‌کند و بر اساس ترتیب تعیین‌شده در تنظیمات، به دنبال دستگاه بوت (معمولاً دیسک سخت) می‌گردد. سپس اولین سکتور (Sector) آن دیسک را که شامل کد راه‌اندازی اولیه (Bootstrap) است، می‌خواند و اجرا می‌کند.

• ۴. اجرای Bootloader (GRUB)

Bootloader مانند GRUB (Grand Unified Bootloader) وظیفه بارگذاری هسته لینوکس را دارد. GRUB به کاربر اجازه می‌دهد تا در صورت نیاز، هسته یا سیستم‌عامل دیگری را انتخاب کند.

• ۵. بارگذاری هسته (Kernel) و اجرای systemd

هسته (Kernel) لینوکس بارگذاری می‌شود، دستگاه‌ها را شناسایی می‌کند و سپس اولین پردازش در فضای کاربری (User Space) یعنی systemd (با PID ۱) را اجرا می‌کند. systemd مدیر سرویس‌های اصلی سیستم است.

• ۶. اجرای فایل‌های target و اسکریپت‌ها

systemd بر اساس target پیش‌فرض (معمولاً multi-user.target)، سرویس‌های مختلف مانند sshd.service، getty.target و ... را راه‌اندازی می‌کند. در نهایت، اسکریپت‌های محیط کاربر مانند /etc/profile و ~/.bashrc اجرا می‌شوند و سیستم آماده ورود کاربر می‌شود.

▍ بررسی اطلاعات سخت‌افزاری با دستورات لینوکس

در این بخش، دستوراتی که در ترمینال اجرا کردیم را بررسی می‌کنیم. این دستورات به ما امکان می‌دهند تا اطلاعات دقیق سخت‌افزاری سیستم را که در طول فرآیند بوت جمع‌آوری شده‌اند، مشاهده کنیم.

• ۱. دایرکتوری /proc (پردازش‌ها و اطلاعات هسته)

دایرکتوری /proc یک سیستم فایل مجازی (Virtual Filesystem) است که توسط هسته ایجاد می‌شود و اطلاعات لحظه‌ای در مورد پردازش‌ها، سخت‌افزار و تنظیمات هسته را در اختیار کاربر قرار می‌دهد. این دایرکتوری برای عیب‌یابی سخت‌افزاری بسیار مفید است.

┌──(ya3in㉿kali)-[~] └─$ cd /proc └─$ ls 1 104388 106717 1248 1508 2333 315 44853 666 728 840 crypto partitions 10 104390 106733 125 1509 2351 316 449 669 72979 85 devices pressure 100 104393 106804 127 1510 2354 317 45 67 73 85006 diskstats schedstat ... (و تعداد زیادی فایل و دایرکتوری دیگر)

توضیح: با cd /proc وارد دایرکتوری مجازی /proc می‌شویم. ls لیستی از فایل‌ها و دایرکتوری‌ها را نشان می‌دهد که هرکدام اطلاعات خاصی را ارائه می‌دهند. دایرکتوری‌های شماره‌دار (مثل 1, 10, 100) مربوط به پردازش‌های در حال اجرا هستند.

• ۲. مشاهده اطلاعات حافظه با cat /proc/meminfo

┌──(ya3in㉿kali)-[/proc] └─$ cat meminfo MemTotal: 16110564 kB MemFree: 11549800 kB MemAvailable: 12499384 kB Buffers: 51688 kB Cached: 1921652 kB SwapCached: 200 kB Active: 1659640 kB Inactive: 1920368 kB ... (و ادامه)

توضیح: این فایل اطلاعات دقیقی در مورد حافظه فیزیکی و Swap سیستم ارائه می‌دهد. MemTotal کل حافظه، MemFree حافظه آزاد و MemAvailable حافظه در دسترس را نشان می‌دهد.

• ۳. مشاهده اطلاعات پردازنده با cat /proc/cpuinfo

┌──(ya3in㉿kali)-[/proc] └─$ cat cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 141 model name : 11th Gen Intel(R) Core(TM) i5-11400H @ 2.70GHz stepping : 1 microcode : 0x58 cpu MHz : 800.000 cache size : 12288 KB physical id : 0 siblings : 12 core id : 0 cpu cores : 6 flags : fpu vme de pse ... (و ادامه)

توضیح: این فایل اطلاعات کامل پردازنده را نمایش می‌دهد. از جمله مدل، سرعت (MHz)، اندازه کش، تعداد هسته‌ها (cpu cores) و قابلیت‌های پشتیبانی‌شده (flags). در خروجی بالا، ما یک پردازنده Intel Core i5-11400H با ۶ هسته و ۱۲ رشته (siblings) داریم.

• ۴. مشاهده وضعیت IRQها با cat /proc/interrupts

┌──(ya3in㉿kali)-[/proc] └─$ cat interrupts CPU0 CPU1 ... 1: 1780 0 ... IR-IO-APIC 1-edge i8042 8: 0 0 ... IR-IO-APIC 8-edge rtc0 9: 256 0 ... IR-IO-APIC 9-fasteoi acpi 172: 754340 0 ... IR-PCI-MSI-0000:00:02.0 0-edge i915

توضیح: این فایل تعداد وقفه‌های (Interrupts) ارسال‌شده به هر هسته CPU را نشان می‌دهد. برای مثال، IRQ 172 مربوط به کارت گرافیک i915 است و بیشترین وقفه را پردازش کرده است.

• ۵. مشاهده نقشه حافظه I/O با cat /proc/iomem

┌──(ya3in㉿kali)-[/proc] └─$ cat iomem 00000000-00000000 : Reserved 00000000-00000000 : System RAM 00000000-00000000 : PCI Bus 0000:00 00000000-00000000 : Kernel code 00000000-00000000 : Kernel rodata 00000000-00000000 : Kernel data 00000000-00000000 : Kernel bss

توضیح: این فایل نقشه حافظه فیزیکی سیستم را نشان می‌دهد و مشخص می‌کند که هر بخش از حافظه به کدام دستگاه یا بخش سیستم اختصاص داده شده است.

• ۶. دایرکتوری /sys (اطلاعات دستگاه‌ها)

دایرکتوری /sys نیز یک سیستم فایل مجازی است که اطلاعات دستگاه‌ها و درایورهای هسته را در اختیار کاربر قرار می‌دهد.

┌──(ya3in㉿kali)-[/proc] └─$ cd /sys └─$ ls block bus class dev devices firmware fs hypervisor kernel module power

توضیح: /sys شامل اطلاعاتی است که کاربر با سخت‌افزار در ارتباط است. مثلاً /sys/class یا /sys/devices اطلاعات دستگاه‌ها را دارند.

• ۷. بررسی حافظه با free -h

┌──(ya3in㉿kali)-[/sys] └─$ free -h total used free shared buff/cache available Mem: 15Gi 3.5Gi 10Gi 812Mi 2.0Gi 11Gi Swap: 2.1Gi 272Ki 2.1Gi

توضیح: free -h میزان حافظه استفاده‌شده و آزاد را به صورت قابل خواندن برای انسان (Human-readable) نمایش می‌دهد. این دستور اطلاعات لحظه‌ای از /proc/meminfo را خلاصه‌سازی می‌کند.

• ۸. مشاهده اطلاعات CPU با lscpu

┌──(ya3in㉿kali)-[/sys] └─$ lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Address sizes: 39 bits physical, 48 bits virtual Byte Order: Little Endian CPU(s): 12 On-line CPU(s) list: 0-11 Vendor ID: GenuineIntel Model name: 11th Gen Intel(R) Core(TM) i5-11400H @ 2.70GHz CPU family: 6 Model: 141 Thread(s) per core: 2 Core(s) per socket: 6 Socket(s): 1 ...

توضیح: lscpu اطلاعات معماری CPU را نمایش می‌دهد. از جمله تعداد هسته‌ها، رشته‌ها، معماری (x86_64) و فرکانس.

• ۹. مشاهده اطلاعات دیسک با lsblk

┌──(ya3in㉿kali)-[/sys] └─$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS nvme0n1 259:0 0 476.9G 0 disk ├─nvme0n1p1 259:1 0 260M 0 part ├─nvme0n1p2 259:2 0 16M 0 part ├─nvme0n1p3 259:3 0 375.8G 0 part ├─nvme0n1p4 259:4 0 1.2G 0 part ├─nvme0n1p5 259:5 0 977M 0 part /boot/efi ├─nvme0n1p6 259:6 0 38G 0 part / ├─nvme0n1p7 259:7 0 2.1G 0 part [SWAP] ├─nvme0n1p8 259:8 0 35.2G 0 part ├─nvme0n1p9 259:9 0 22G 0 part └─nvme0n1p10 259:10 0 200M 0 part

توضیح: lsblk ساختار دیسک‌ها و پارتیشن‌ها را به صورت درختی نمایش می‌دهد. nvme0n1 یک دیسک NVMe با ظرفیت ۴۷۶.۹ گیگابایت است که به چند پارتیشن تقسیم شده است. /dev/nvme0n1p6 با ۳۸ گیگ، پارتیشن ریشه (/) است و /dev/nvme0n1p5 پارتیشن /boot/efi است.

• ۱۰. مشاهده دستگاه‌های USB با lsusb

┌──(ya3in㉿kali)-[/sys] └─$ lsusb Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 003 Device 002: ID 3151:3020 YICHIP Wireless Device Bus 003 Device 003: ID 322e:202c Sonix Technology Co., Ltd. USB2.0 HD UVC WebCam Bus 003 Device 004: ID 13d3:3563 IMC Networks Wireless_Device Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub

توضیح: lsusb دستگاه‌های USB متصل به سیستم را نمایش می‌دهد. در خروجی بالا، دستگاه‌هایی مانند کیبورد/ماوس بی‌سیم (YICHIP) و وب‌کم (USB2.0 HD UVC WebCam) قابل مشاهده هستند.

• ۱۱. نصب و استفاده از lshw برای اطلاعات کامل سخت‌افزاری

┌──(ya3in㉿kali)-[/sys] └─$ sudo apt install lshw └─$ sudo lshw kali description: Computer width: 64 bits *-core description: Motherboard *-memory description: System memory size: 15GiB *-cpu product: 11th Gen Intel(R) Core(TM) i5-11400H @ 2.70GHz vendor: Intel Corp. size: 1GHz capacity: 4500MHz *-pci:0 description: Host bridge product: Tiger Lake-H 6 cores Host Bridge/DRAM Registers ...

توضیح: lshw اطلاعات جامع و دقیقی از تمام سخت‌افزارهای سیستم (مادربرد، CPU، حافظه، PCI، USB، دیسک و ...) را نمایش می‌دهد. این دستور نیاز به دسترسی sudo دارد.

• ۱۲. نصب و استفاده از lsdev برای مشاهده دستگاه‌ها

┌──(ya3in㉿kali)-[/sys] └─$ sudo apt install procinfo └─$ lsdev Device DMA IRQ I/O Ports ------------------------------------------------- 0 nvme0q0 164 0 intel-gpio 328 ELAN1203:00 161 1 nvme0q1 165 ...

توضیح: lsdev اطلاعات دستگاه‌های سیستم را به همراه IRQ، DMA و پورت‌های I/O نمایش می‌دهد. این ابزار با نصب بسته procinfo در دسترس قرار می‌گیرد.

▍ خلاصه و جمع‌بندی

✅ تمرین پیشنهادی:
  • با cat /proc/cpuinfo اطلاعات پردازنده خود را بررسی کنید.
  • با lsblk ساختار پارتیشن‌بندی دیسک خود را ببینید و هر پارتیشن را شناسایی کنید.
  • با free -h میزان حافظه آزاد و استفاده‌شده را مشاهده کنید.
  • با lshw اطلاعات کامل سخت‌افزاری را دریافت کنید.
  • با lsusb دستگاه‌های USB متصل را شناسایی کنید.